Ethereum スマートコントラクトのエンコードされた関数シグネチャを得る
Ethereum スマートコントラクトのエンコードされた関数シグネチャを得る方法のメモです。
エンコードされた関数シグネチャとは
スマートコントラクトの関数を call するコードをローレベルで書いたり、マルチシグウォレットからスマートコントラクトの関数を call する際に必要となります。
functionName(type1,type2,...) という関数のプロトタイプ文字列を、Keccak256 でハッシュ化したあとの最初の4バイトがエンコードされた関数シグネチャになります。
たとえば、sendMessage(string message, address to) という関数の場合、エンコードされた関数シグネチャはsendMessage(string,address) を Keccak256 でハッシュ化した最初の4バイト 0xc48d6d5e です。
Web3 を使用して関数シグネチャを得る
Web3 1.0.0 では、エンコードされた関数シグネチャを簡単に得ることのできる関数が用意されています。
code:example.js
let encodedFunctionSignature = web3.eth.abi.encodeFunctionSignature('sendMessage(string,address)');
console.log(encodedFunctionSignature);
// => 0xc48d6d5e
デモ
https://piyolab.github.io/playground/ethereum/getEncodedFunctionSignature/
関連
http://blog.playground.io/entry/2018/05/08/163727
参考
https://web3js.readthedocs.io/en/1.0/web3-eth-abi.html#encodefunctionsignature
#web3.js@1.0 #howto